#include "BulletDynamics/Vehicle/btRaycastVehicle.h"
#ifdef __cplusplus
extern "C" {
#endif
btRaycastVehicle::btVehicleTuning* bullet_NewbtRaycastVehiclebtVehicleTuning(){
	btRaycastVehicle::btVehicleTuning* wrap_out = new btRaycastVehicle::btVehicleTuning();
	return wrap_out;
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_frictionSlip(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_frictionSlip);
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_maxSuspensionForce(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_maxSuspensionForce);
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_maxSuspensionTravelCm(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_maxSuspensionTravelCm);
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_suspensionCompression(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_suspensionCompression);
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_suspensionDamping(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_suspensionDamping);
}

double bullet_btRaycastVehiclebtVehicleTuning_GetFieldOfM_suspensionStiffness(btRaycastVehicle::btVehicleTuning* c_this){
	return (double)(c_this->m_suspensionStiffness);
}

btRaycastVehicle* bullet_NewbtRaycastVehicle(btRaycastVehicle::btVehicleTuning* tuning,btRigidBody* chassis,btVehicleRaycaster* raycaster){
	btRaycastVehicle::btVehicleTuning const& c_arg_tuning=(btRaycastVehicle::btVehicleTuning const&)(*tuning);
	btRigidBody * c_arg_chassis=(btRigidBody *)(void*)(chassis);
	btVehicleRaycaster * c_arg_raycaster=(btVehicleRaycaster *)(void*)(raycaster);
	btRaycastVehicle* wrap_out = new btRaycastVehicle(c_arg_tuning,c_arg_chassis,c_arg_raycaster);
	return wrap_out;
}

btWheelInfo* bullet_btRaycastVehicle_addWheel(btRaycastVehicle* c_this,btVector3* connectionPointCS0,btVector3* wheelDirectionCS0,btVector3* wheelAxleCS,double suspensionRestLength,double wheelRadius,btRaycastVehicle::btVehicleTuning* tuning,bool isFrontWheel){
	btVector3 const& c_arg_connectionPointCS0=(btVector3 const&)(*connectionPointCS0);
	btVector3 const& c_arg_wheelDirectionCS0=(btVector3 const&)(*wheelDirectionCS0);
	btVector3 const& c_arg_wheelAxleCS=(btVector3 const&)(*wheelAxleCS);
	btScalar c_arg_suspensionRestLength=suspensionRestLength;
	btScalar c_arg_wheelRadius=wheelRadius;
	btRaycastVehicle::btVehicleTuning const& c_arg_tuning=(btRaycastVehicle::btVehicleTuning const&)(*tuning);
	bool c_arg_isFrontWheel=isFrontWheel;
	btWheelInfo& c_out = c_this->addWheel(c_arg_connectionPointCS0,c_arg_wheelDirectionCS0,c_arg_wheelAxleCS,c_arg_suspensionRestLength,c_arg_wheelRadius,c_arg_tuning,c_arg_isFrontWheel);
	btWheelInfo* wrap_out = (btWheelInfo*)(&c_out);
	return wrap_out;
}

void bullet_btRaycastVehicle_applyEngineForce(btRaycastVehicle* c_this,double force,int wheel){
	btScalar c_arg_force=force;
	int c_arg_wheel=wheel;
	c_this->applyEngineForce(c_arg_force,c_arg_wheel);
}

btTransform* bullet_btRaycastVehicle_getChassisWorldTransform(btRaycastVehicle* c_this){
	btTransform const& c_out = c_this->getChassisWorldTransform();
	btTransform* wrap_out = (btTransform*)(&c_out);
	return wrap_out;
}

double bullet_btRaycastVehicle_getCurrentSpeedKmHour(btRaycastVehicle* c_this){
	btScalar c_out = c_this->getCurrentSpeedKmHour();
	double wrap_out = (c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getForwardAxis(btRaycastVehicle* c_this){
	int c_out = c_this->getForwardAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btRaycastVehicle_getForwardVector(btRaycastVehicle* c_this){
	btVector3 c_out = c_this->getForwardVector();
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getNumWheels(btRaycastVehicle* c_this){
	int c_out = c_this->getNumWheels();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getRightAxis(btRaycastVehicle* c_this){
	int c_out = c_this->getRightAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

double bullet_btRaycastVehicle_getSteeringValue(btRaycastVehicle* c_this,int wheel){
	int c_arg_wheel=wheel;
	btScalar c_out = c_this->getSteeringValue(c_arg_wheel);
	double wrap_out = (c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getUpAxis(btRaycastVehicle* c_this){
	int c_out = c_this->getUpAxis();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getUserConstraintId(btRaycastVehicle* c_this){
	int c_out = c_this->getUserConstraintId();
	int wrap_out = (c_out);
	return wrap_out;
}

int bullet_btRaycastVehicle_getUserConstraintType(btRaycastVehicle* c_this){
	int c_out = c_this->getUserConstraintType();
	int wrap_out = (c_out);
	return wrap_out;
}

btWheelInfo* bullet_btRaycastVehicle_getWheelInfo(btRaycastVehicle* c_this,int index){
	int c_arg_index=index;
	btWheelInfo const& c_out = c_this->getWheelInfo(c_arg_index);
	btWheelInfo* wrap_out = (btWheelInfo*)(&c_out);
	return wrap_out;
}

btWheelInfo* bullet_btRaycastVehicle_getWheelInfo1(btRaycastVehicle* c_this,int index){
	int c_arg_index=index;
	btWheelInfo& c_out = c_this->getWheelInfo(c_arg_index);
	btWheelInfo* wrap_out = (btWheelInfo*)(&c_out);
	return wrap_out;
}

btTransform* bullet_btRaycastVehicle_getWheelTransformWS(btRaycastVehicle* c_this,int wheelIndex){
	int c_arg_wheelIndex=wheelIndex;
	btTransform const& c_out = c_this->getWheelTransformWS(c_arg_wheelIndex);
	btTransform* wrap_out = (btTransform*)(&c_out);
	return wrap_out;
}

double bullet_btRaycastVehicle_rayCast(btRaycastVehicle* c_this,btWheelInfo* wheel){
	btWheelInfo& c_arg_wheel=(btWheelInfo&)(*wheel);
	btScalar c_out = c_this->rayCast(c_arg_wheel);
	double wrap_out = (c_out);
	return wrap_out;
}

void bullet_btRaycastVehicle_resetSuspension(btRaycastVehicle* c_this){
	c_this->resetSuspension();
}

void bullet_btRaycastVehicle_setBrake(btRaycastVehicle* c_this,double brake,int wheelIndex){
	btScalar c_arg_brake=brake;
	int c_arg_wheelIndex=wheelIndex;
	c_this->setBrake(c_arg_brake,c_arg_wheelIndex);
}

void bullet_btRaycastVehicle_setPitchControl(btRaycastVehicle* c_this,double pitch){
	btScalar c_arg_pitch=pitch;
	c_this->setPitchControl(c_arg_pitch);
}

void bullet_btRaycastVehicle_setSteeringValue(btRaycastVehicle* c_this,double steering,int wheel){
	btScalar c_arg_steering=steering;
	int c_arg_wheel=wheel;
	c_this->setSteeringValue(c_arg_steering,c_arg_wheel);
}

void bullet_btRaycastVehicle_setUserConstraintId(btRaycastVehicle* c_this,int uid){
	int c_arg_uid=uid;
	c_this->setUserConstraintId(c_arg_uid);
}

void bullet_btRaycastVehicle_setUserConstraintType(btRaycastVehicle* c_this,int userConstraintType){
	int c_arg_userConstraintType=userConstraintType;
	c_this->setUserConstraintType(c_arg_userConstraintType);
}

void bullet_btRaycastVehicle_updateSuspension(btRaycastVehicle* c_this,double deltaTime){
	btScalar c_arg_deltaTime=deltaTime;
	c_this->updateSuspension(c_arg_deltaTime);
}

void bullet_btRaycastVehicle_updateWheelTransform(btRaycastVehicle* c_this,int wheelIndex,bool interpolatedTransform){
	int c_arg_wheelIndex=wheelIndex;
	bool c_arg_interpolatedTransform=interpolatedTransform;
	c_this->updateWheelTransform(c_arg_wheelIndex,c_arg_interpolatedTransform);
}

void bullet_btRaycastVehicle_updateWheelTransformsWS(btRaycastVehicle* c_this,btWheelInfo* wheel,bool interpolatedTransform){
	btWheelInfo& c_arg_wheel=(btWheelInfo&)(*wheel);
	bool c_arg_interpolatedTransform=interpolatedTransform;
	c_this->updateWheelTransformsWS(c_arg_wheel,c_arg_interpolatedTransform);
}

btDefaultVehicleRaycaster* bullet_NewbtDefaultVehicleRaycaster(btDynamicsWorld* world){
	btDynamicsWorld * c_arg_world=(btDynamicsWorld *)(void*)(world);
	btDefaultVehicleRaycaster* wrap_out = new btDefaultVehicleRaycaster(c_arg_world);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
